package cn.broadsense.biz.domain;

import cn.broadsense.biz.dto.Channel3dDataDto;
import cn.broadsense.common.annotation.Excel;
import cn.broadsense.common.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 点位表
 *
 * @TableName t_channel
 */
@TableName(value = "t_channel")
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("点位数据")
public class Channel extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1485766930295332137L;
    /**
     * id
     */
    @TableId(type = IdType.AUTO)
    @ApiModelProperty("id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;


    /**
     * 通道编码
     */
    @ApiModelProperty("通道编码")
    @Excel(name = "设备编号", sort = 1)
    private String channelCode;

    /**
     * 通道名称
     */
    @ApiModelProperty("通道名称")
    @Excel(name = "设备名称", sort = 2)
    private String channelName;

    /**
     * 摄像机类型（1-枪机 2- 球机 3-半球 ）
     */
    @ApiModelProperty("摄像机类型（1-枪机 2- 球机 3-半球 ）")
    private String cameraType;

    /**
     * 通道国际编码
     */
    @ApiModelProperty("通道国际编码")
    private String channelSn;

    /**
     * 协议
     */
    @ApiModelProperty("协议")
    private String protocol;

    /**
     * 点位ip
     */
    @ApiModelProperty("点位ip")
    private String ipAddress;

    /**
     * 部门id
     */
    @ApiModelProperty("部门id")
    private Long deptId;

    /**
     * 部门名称
     */
    @ApiModelProperty("部门名称")
    private String deptName;

    /**
     * 阶段标识
     */
    @ApiModelProperty("阶段标识")
    private String stageTag;

    /**
     * 型号
     */
    @ApiModelProperty("型号")
    private String model;

    /**
     * 像素
     */
    @ApiModelProperty("像素")
    private String pixel;

    /**
     * 经度
     */
    @ApiModelProperty("经度")
    private String gpsX;

    /**
     * 纬度
     */
    @ApiModelProperty("纬度")
    private String gpsY;

    /**
     * 安装地址
     */
    @ApiModelProperty("安装地址")
    private String installAddress;

    /**
     * 功能应用
     */
    @ApiModelProperty("功能应用")
    private String ability;

    /**
     * 立杆高度
     */
    @ApiModelProperty("立杆高度")
    private BigDecimal columnHeight;

    /**
     * 横臂长度
     */
    @ApiModelProperty("横臂长度")
    private BigDecimal columnLength;

    /**
     * 朝向
     */
    @ApiModelProperty("朝向")
    private String orientation;

    /**
     * 杆件编码
     */
    @ApiModelProperty("杆件编码")
    private String columnCode;

    /**
     * 三维数据状态 1=无三维数据 2已填写三维数据
     */
    @ApiModelProperty("三维数据状态 1=无三维数据 2已填写三维数据 3=已创建任务")
    @Excel(name = "状态", sort = 6, readConverterExp = "1=待采集,2=已采集,3=采集中")
    private Integer threeDDataStatus;

    /**
     * 数据来源 1=视频云平台 2=自主创建
     */
    @ApiModelProperty("数据来源 1=视频云平台 2=自主创建")
    @Excel(name = "对接来源", sort = 4, readConverterExp = "1=视频云平台,2=自主创建")
    private Integer dataSource;

    /**
     * 同步时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("同步时间")
    @Excel(name = "同步时间", sort = 5, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date syncTime;

    @ApiModelProperty("组织编码")
    private String orgCode;
    @ApiModelProperty("组织名称")
    private String orgName;

    @ApiModelProperty("附件信息")
    private String attachment;

    @TableField(exist = false)
    @ApiModelProperty("三维数据")
    private Channel3dDataDto channel3dData;


    @TableField(exist = false)
    @ApiModelProperty("开始时间")
    private Date beginTime;

    @TableField(exist = false)
    @ApiModelProperty("结束时间")
    private Date endTime;
    @TableField(exist = false)
    @ApiModelProperty("是否收藏 1=收藏 0=未收藏 2=标签")
    private Integer follow;


    @TableField(exist = false)
    @JsonIgnore
    @ApiModelProperty(hidden = true)
    private Long userId;

    @TableField(exist = false)
    private Boolean isPage = true;

    @ApiModelProperty("标签id")
    @TableField(exist = false)
    private Long tagId;
    @ApiModelProperty("搜索值")
    @TableField(exist = false)
    private String searchValue;
    @ApiModelProperty("标签id列表")
    @TableField(exist = false)
    private List<Long> tagList;


    @ApiModelProperty("标签列表")
    @TableField(exist = false)
    private List<ChannelTag> channelTagList;

    private String delFlag;

    @ApiModelProperty("是否有立杆(1-是、2-否)")
    private Integer pole;

    @ApiModelProperty("立杆经度")
    private Double poleLng;

    @ApiModelProperty("立杆坐标纬度")
    private Double poleLat;
    @ApiModelProperty("立杆高度")
    private Integer poleHeight;

    @ApiModelProperty("1=在线 0=离线")
    private Integer status;

    @ApiModelProperty("导出id列表")
    @TableField(exist = false)
    private List<Long> exportIds;



    @TableField(exist = false)
    private List<ChannelTagDetails> customTagList;

}